// 是否理解参数（arguments）
// 先来一题 定义一个未定义的log方法代理console.log()
function log(msg) {
  console.log(msg);
}
log("hello world")

// 深入 如果传入参数个数不确定呢 更好的候选人 注意区分apply和call的区别
function info() {
  console.log.apply(console, arguments)
}
info("javascript", "es6", 2)

// 继续深入 给每个log消息添加一个'(app)'的前缀 eg:'(app) hello world'
function preinfo() {
  // addition:call中第一个参数
  var arr = Array.prototype.slice.call(arguments)
  arr.unshift('(app)')
  // addition:apply中第一个参数
  console.log.apply(console, arr);
}
preinfo('hello')



// apply的骚用法
const array = ['a', 'b'];
const elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]



// 就这样结束把，slice/splice/split傻傻分不清楚
